US adults

  1. Use participants’ responses (participant level) to infer factor structure (group level).

[see primary analysis]

                                F1        F2        F3
add_and_subtract_numbers 0.3015693 0.6612121 0.7481824
choose_what_to_do        0.6276047 0.5857757 0.7653071
feel_guilty              0.4849668 0.9023377 0.4963885
feel_happy               0.6424526 0.7481342 0.5906878
feel_love                0.5717189 0.7613585 0.6260784
feel_pain                0.8567989 0.5385989 0.5680515
  1. Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
                              F1        F2         F3
us_adults_001_children 0.7909415 0.8954840 0.65345066
us_adults_002_dogs     0.8713361 0.5543401 0.53060180
us_adults_003_flowers  0.2746960 0.2022339 0.23657931
us_adults_004_ghosts   0.1886655 0.2927940 0.06010919
us_adults_005_god      0.5496792 0.4723938 0.83329245
us_adults_006_mice     0.8317943 0.8963377 0.73683937

X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]

[not yet done]

  1. Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
  1. Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"

Ghana adults

  1. Use participants’ responses (participant level) to infer factor structure (group level).

[see primary analysis]

                                F1        F2        F3
add_and_subtract_numbers 0.8977570 0.4136200 0.5320056
choose_what_to_do        0.9636416 0.4411554 0.5062167
feel_guilty              0.7126476 0.5189170 0.7807534
feel_happy               0.8540450 0.6572355 0.5245890
feel_love                0.8346477 0.6966779 0.4696541
feel_pain                0.4913013 0.9277966 0.4906321
  1. Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
                              F1        F2        F3
gh_adults_001_mice     0.1680483 0.3503157 0.0376021
gh_adults_002_rocks    0.1338851 0.0719287 0.2601291
gh_adults_003_ghosts   0.1338851 0.0719287 0.2601291
gh_adults_004_children 0.2390378 0.6541640 0.2865854
gh_adults_005_dogs     0.2496531 0.5315998 0.1083054
gh_adults_006_mice     0.1369381 0.4771385 0.1624910

X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]

[not yet done]

  1. Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
  1. Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"

Thailand adults

  1. Use participants’ responses (participant level) to infer factor structure (group level).

[see primary analysis]

                                F1        F2        F3
add_and_subtract_numbers 0.3345998 0.6719092 0.7022970
choose_what_to_do        0.5664697 0.5761459 0.6567927
feel_guilty              0.5590047 0.7524198 0.5655023
feel_happy               0.6425198 0.6704252 0.6321465
feel_love                0.7073527 0.6682337 0.6099321
feel_pain                0.8593740 0.4976528 0.5549564
  1. Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
                                F1        F2        F3
th_adults_001_beetles    0.6233860 0.1969347 0.3112682
th_adults_002_cellphones 0.4833901 0.4476217 0.6774423
th_adults_003_chickens   0.6684956 0.3701527 0.7637585
th_adults_004_children   0.5107500 0.6915550 0.6301014
th_adults_005_dogs       0.7923884 0.4644085 0.3598374
th_adults_006_flowers    0.5709171 0.7423704 0.5601472

X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]

[not yet done]

  1. Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
  1. Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"

China adults

  1. Use participants’ responses (participant level) to infer factor structure (group level).

[see primary analysis]

                                F1        F2        F3
add_and_subtract_numbers 0.6284769 0.3740907 0.7379231
choose_what_to_do        0.5779161 0.5186490 0.7441678
feel_guilty              0.8040457 0.3863869 0.5952617
feel_happy               0.7462067 0.6846333 0.5606633
feel_love                0.8084793 0.5283226 0.5794758
feel_pain                0.5452631 0.9016957 0.5112793
  1. Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
                                F1         F2        F3
ch_adults_001_crickets   0.5692214 0.70389580 0.6341113
ch_adults_002_cellphones 0.1396171 0.08277301 0.2361723
ch_adults_003_chickens   0.1809178 0.75578045 0.5116998
ch_adults_004_children   0.7612876 0.76045109 0.5833485
ch_adults_005_dogs       0.7572805 0.74353491 0.2976104
ch_adults_006_flowers    0.2348517 0.46360755 0.1464597

X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]

[not yet done]

  1. Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
  1. Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"

Vanuatu adults

  1. Use participants’ responses (participant level) to infer factor structure (group level).

[see primary analysis]

                                F1        F2
add_and_subtract_numbers 0.8695329 0.3822839
choose_what_to_do        0.8698792 0.5049559
feel_guilty              0.6753464 0.7287989
feel_happy               0.8838876 0.4860213
feel_love                0.8311705 0.5654258
feel_pain                0.5665094 0.8688630
  1. Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
                                F1        F2
vt_adults_001_mice       0.4745304 0.4925990
vt_adults_003_children   0.9512062 0.9196058
vt_adults_004_chickens   0.9512062 0.9196058
vt_adults_005_children   0.9512062 0.9196058
vt_adults_006_god        0.7480859 0.1696910
vt_adults_008_cellphones 0.7147565 0.9022099

X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]

[not yet done]

  1. Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
  1. Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"

Comparison

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCiMgVVMgYWR1bHRzCgoxLiBVc2UgcGFydGljaXBhbnRzJyByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBpbmZlciBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkuCgpbc2VlIHByaW1hcnkgYW5hbHlzaXNdCgpgYGB7cn0KbG9hZGluZ3NfdXNfYWR1bHRzIDwtIGVmYV91c19hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcmVuYW1lX2FsbCh+IGdzdWIoIl4uKl8iLCAiIiwgLikpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCIgXFxbXFwuXFwuXFwuXFxdIiwgIiIsIGNhcGFjaXR5KSwKICAgICAgICAgY2FwYWNpdHkgPSBnc3ViKCIgIiwgIl8iLCBjYXBhY2l0eSkpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiY2FwYWNpdHkiKSAlPiUKICBhcy5tYXRyaXgoKSAlPiUKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpLCBmcm9tID0gYygtMSwgMSkpCgpoZWFkKGxvYWRpbmdzX3VzX2FkdWx0cykKYGBgCgoyLiBVc2UgZmFjdG9yIHN0cnVjdHVyZSAoZ3JvdXAgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gZ2VuZXJhdGUgZmFjdG9yIHNjb3JlcyAocGFydGljaXBhbnQgbGV2ZWwpLgoKYGBge3J9CnNjb3Jlc191c19hZHVsdHMgPC0gZWZhX3VzX2FkdWx0cyRzY29yZXNbXSAlPiUgCiAgIyByZXNjYWxlIHRvIHJhbmdlIGZyb20gMCB0byAxLCB1c2luZyBvYnNlcnZlZCByYW5nZSBvZiBmYWN0b3Igc2NvcmVzCiAgc2NhbGVzOjpyZXNjYWxlKHRvID0gYygwLCAxKSkKCmhlYWQoc2NvcmVzX3VzX2FkdWx0cykKYGBgCgpYLiBVc2UgZmFjdG9yIHNjb3JlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIG1ha2UgYmluYXJ5IGRlY2lzaW9ucyBhYm91dCBhdHRyaWJ1dGlvbnMgb2YgYm9keSwgaGVhcnQsIGFuZCBtaW5kIChwYXJ0aWNpcGFudCBsZXZlbCBsZXZlbCkuIFtORUVERUQ/XQoKW25vdCB5ZXQgZG9uZV0KCjMuIFVzZSBmYWN0b3Igc2NvcmVzIFtvciBYP10gKHBhcnRpY2lwYW50IGxldmVsKSBpbiBjb21iaW5hdGlvbiB3aXRoIGZhY3RvciBsb2FkaW5ncyAoZ3JvdXAgbGV2ZWwpIHRvIHRvIGdlbmVyYXRlIGxpa2VsaWhvb2Qgb2YgZWFjaCBjYXBhY2l0eSAocGFydGljaXBhbnQgbGV2ZWwpLgoKYGBge3J9Cm1hZ2ljX3VzX2FkdWx0cyA8LSBtYWdpY19mdW4obG9hZGluZ3NfdXNfYWR1bHRzLCBzY29yZXNfdXNfYWR1bHRzKSAlPiUKICBkYXRhLmZyYW1lKCkKYGBgCgo0LiBDb21wYXJlIGxpa2VsaWhvb2Qgb2YgZWFjaCBjYXBhY2l0eSAocGFydGljaXBhbnQgbGV2ZWwpIHdpdGggYWN0dWFsIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGFzc2VzcyBjb25zaXN0ZW5jeSBvciB2aW9sYXRpb25zIHdpdGggZ3JvdXAtbGV2ZWwgZmFjdG9yIHN0cnVjdHVyZS4KCmBgYHtyfQptYWdpY19zdWJfZGF0YV91c19hZHVsdHMgPC0gbWFnaWNfdXNfYWR1bHRzIC0gZF91c19hZHVsdHNfdwoKbWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzIDwtIG1hZ2ljX3N1Yl9kYXRhX3VzX2FkdWx0cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIikgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBkaWZmLCAtc3Vial9pZCkgJT4lCiAgbXV0YXRlKGNhcGFjaXR5ID0gZ3N1YigiXyIsICIgIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoImZlZWwgc2ljayIsICJmZWVsIHNpY2sgXFxbXFwuXFwuXFwuXFxdIiwgY2FwYWNpdHkpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMn0KbWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzICU+JQogIGxlZnRfam9pbihkX3VzX2FkdWx0cyAlPiUgZGlzdGluY3Qoc3Vial9pZCwgdGFyZ2V0KSkgJT4lCiAgbGVmdF9qb2luKGxvYWRpbmdzX2FkdWx0cyAlPiUgCiAgICAgICAgICAgICAgZGlzdGluY3QoY2FwYWNpdHksIGNhcGFjaXR5X29yZF91cykpICU+JQogIGdncGxvdChhZXMoeCA9IGNhcGFjaXR5X29yZF91cywgCiAgICAgICAgICAgICB5ID0gc3Vial9pZCwgCiAgICAgICAgICAgICBmaWxsID0gZGlmZikpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHRhcmdldCksIAogICAgICAgICAgICAgc3BhY2UgPSAiZnJlZSIsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fdGlsZSgpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcih0eXBlID0gImRpdiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlVTIGFkdWx0cyIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwgeSA9ICJQYXJ0aWNpcGFudCIsIGZpbGwgPSAiUHJlZGljdGVkIC0gQWN0dWFsIikKYGBgCgpgYGB7cn0KbWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzICU+JQogIGdyb3VwX2J5KHN1YmpfaWQpICU+JQogIHN1bW1hcmlzZShtZWFuX2RpZmYgPSBtZWFuKGRpZmYsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtZWFuX2RpZmYpKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21fZGVuc2l0eSgpICsKICBsYWJzKHRpdGxlID0gIlVTIGFkdWx0cyIsCiAgICAgICB4ID0gIk1lYW4gUHJlZGljdGVkIC0gQWN0dWFsIiwgeSA9ICJEZW5zaXR5IikKYGBgCgoKIyBHaGFuYSBhZHVsdHMKCjEuIFVzZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGluZmVyIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKS4KCltzZWUgcHJpbWFyeSBhbmFseXNpc10KCmBgYHtyfQpsb2FkaW5nc19naF9hZHVsdHMgPC0gZWZhX2doX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW5hbWVfYWxsKH4gZ3N1YigiXi4qXyIsICIiLCAuKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIiBcXFtcXC5cXC5cXC5cXF0iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIiAiLCAiXyIsIGNhcGFjaXR5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIGFzLm1hdHJpeCgpICU+JQogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMQogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSksIGZyb20gPSBjKC0xLCAxKSkKCmhlYWQobG9hZGluZ3NfZ2hfYWR1bHRzKQpgYGAKCjIuIFVzZSBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBnZW5lcmF0ZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0Kc2NvcmVzX2doX2FkdWx0cyA8LSBlZmFfZ2hfYWR1bHRzJHNjb3Jlc1tdICU+JSAKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEsIHVzaW5nIG9ic2VydmVkIHJhbmdlIG9mIGZhY3RvciBzY29yZXMKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpKQoKaGVhZChzY29yZXNfZ2hfYWR1bHRzKQpgYGAKClguIFVzZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gbWFrZSBiaW5hcnkgZGVjaXNpb25zIGFib3V0IGF0dHJpYnV0aW9ucyBvZiBib2R5LCBoZWFydCwgYW5kIG1pbmQgKHBhcnRpY2lwYW50IGxldmVsIGxldmVsKS4gW05FRURFRD9dCgpbbm90IHlldCBkb25lXQoKMy4gVXNlIGZhY3RvciBzY29yZXMgW29yIFg/XSAocGFydGljaXBhbnQgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggZmFjdG9yIGxvYWRpbmdzIChncm91cCBsZXZlbCkgdG8gdG8gZ2VuZXJhdGUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0KbWFnaWNfZ2hfYWR1bHRzIDwtIG1hZ2ljX2Z1bihsb2FkaW5nc19naF9hZHVsdHMsIHNjb3Jlc19naF9hZHVsdHMpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCjQuIENvbXBhcmUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkgd2l0aCBhY3R1YWwgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gYXNzZXNzIGNvbnNpc3RlbmN5IG9yIHZpb2xhdGlvbnMgd2l0aCBncm91cC1sZXZlbCBmYWN0b3Igc3RydWN0dXJlLgoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX2doX2FkdWx0cyA8LSBtYWdpY19naF9hZHVsdHMgLSBkX2doX2FkdWx0c193CgptYWdpY19zdWJfZGF0YV9naF9hZHVsdHMgPC0gbWFnaWNfc3ViX2RhdGFfZ2hfYWR1bHRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIGRpZmYsIC1zdWJqX2lkKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiZmVlbCBzaWNrIiwgImZlZWwgc2ljayBcXFtcXC5cXC5cXC5cXF0iLCBjYXBhY2l0eSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyfQptYWdpY19zdWJfZGF0YV9naF9hZHVsdHMgJT4lCiAgbGVmdF9qb2luKGRfZ2hfYWR1bHRzICU+JSBkaXN0aW5jdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChjYXBhY2l0eSwgY2FwYWNpdHlfb3JkX2doKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHlfb3JkX2doLCAKICAgICAgICAgICAgIHkgPSBzdWJqX2lkLCAKICAgICAgICAgICAgIGZpbGwgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGFyZ2V0KSwgCiAgICAgICAgICAgICBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHR5cGUgPSAiZGl2IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiR2hhbmEgYWR1bHRzIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLCB5ID0gIlBhcnRpY2lwYW50IiwgZmlsbCA9ICJQcmVkaWN0ZWQgLSBBY3R1YWwiKQpgYGAKCmBgYHtyfQptYWdpY19zdWJfZGF0YV9naF9hZHVsdHMgJT4lCiAgZ3JvdXBfYnkoc3Vial9pZCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGlmZiA9IG1lYW4oZGlmZiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IG1lYW5fZGlmZikpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9kZW5zaXR5KCkgKwogIGxhYnModGl0bGUgPSAiR2hhbmEgYWR1bHRzIiwKICAgICAgIHggPSAiTWVhbiBQcmVkaWN0ZWQgLSBBY3R1YWwiLCB5ID0gIkRlbnNpdHkiKQpgYGAKCgoKIyBUaGFpbGFuZCBhZHVsdHMKCjEuIFVzZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGluZmVyIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKS4KCltzZWUgcHJpbWFyeSBhbmFseXNpc10KCmBgYHtyfQpsb2FkaW5nc190aF9hZHVsdHMgPC0gZWZhX3RoX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW5hbWVfYWxsKH4gZ3N1YigiXi4qXyIsICIiLCAuKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIiBcXFtcXC5cXC5cXC5cXF0iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIiAiLCAiXyIsIGNhcGFjaXR5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIGFzLm1hdHJpeCgpICU+JQogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMQogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSksIGZyb20gPSBjKC0xLCAxKSkKCmhlYWQobG9hZGluZ3NfdGhfYWR1bHRzKQpgYGAKCjIuIFVzZSBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBnZW5lcmF0ZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0Kc2NvcmVzX3RoX2FkdWx0cyA8LSBlZmFfdGhfYWR1bHRzJHNjb3Jlc1tdICU+JSAKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEsIHVzaW5nIG9ic2VydmVkIHJhbmdlIG9mIGZhY3RvciBzY29yZXMKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpKQoKaGVhZChzY29yZXNfdGhfYWR1bHRzKQpgYGAKClguIFVzZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gbWFrZSBiaW5hcnkgZGVjaXNpb25zIGFib3V0IGF0dHJpYnV0aW9ucyBvZiBib2R5LCBoZWFydCwgYW5kIG1pbmQgKHBhcnRpY2lwYW50IGxldmVsIGxldmVsKS4gW05FRURFRD9dCgpbbm90IHlldCBkb25lXQoKMy4gVXNlIGZhY3RvciBzY29yZXMgW29yIFg/XSAocGFydGljaXBhbnQgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggZmFjdG9yIGxvYWRpbmdzIChncm91cCBsZXZlbCkgdG8gdG8gZ2VuZXJhdGUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0KbWFnaWNfdGhfYWR1bHRzIDwtIG1hZ2ljX2Z1bihsb2FkaW5nc190aF9hZHVsdHMsIHNjb3Jlc190aF9hZHVsdHMpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCjQuIENvbXBhcmUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkgd2l0aCBhY3R1YWwgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gYXNzZXNzIGNvbnNpc3RlbmN5IG9yIHZpb2xhdGlvbnMgd2l0aCBncm91cC1sZXZlbCBmYWN0b3Igc3RydWN0dXJlLgoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX3RoX2FkdWx0cyA8LSBtYWdpY190aF9hZHVsdHMgLSBkX3RoX2FkdWx0c193CgptYWdpY19zdWJfZGF0YV90aF9hZHVsdHMgPC0gbWFnaWNfc3ViX2RhdGFfdGhfYWR1bHRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIGRpZmYsIC1zdWJqX2lkKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiZmVlbCBzaWNrIiwgImZlZWwgc2ljayBcXFtcXC5cXC5cXC5cXF0iLCBjYXBhY2l0eSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyfQptYWdpY19zdWJfZGF0YV90aF9hZHVsdHMgJT4lCiAgbGVmdF9qb2luKGRfdGhfYWR1bHRzICU+JSBkaXN0aW5jdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChjYXBhY2l0eSwgY2FwYWNpdHlfb3JkX3RoKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHlfb3JkX3RoLCAKICAgICAgICAgICAgIHkgPSBzdWJqX2lkLCAKICAgICAgICAgICAgIGZpbGwgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGFyZ2V0KSwgCiAgICAgICAgICAgICBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHR5cGUgPSAiZGl2IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiVGhhaWxhbmQgYWR1bHRzIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLCB5ID0gIlBhcnRpY2lwYW50IiwgZmlsbCA9ICJQcmVkaWN0ZWQgLSBBY3R1YWwiKQpgYGAKCmBgYHtyfQptYWdpY19zdWJfZGF0YV90aF9hZHVsdHMgJT4lCiAgZ3JvdXBfYnkoc3Vial9pZCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGlmZiA9IG1lYW4oZGlmZiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IG1lYW5fZGlmZikpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9kZW5zaXR5KCkgKwogIGxhYnModGl0bGUgPSAiVGhhaWxhbmQgYWR1bHRzIiwKICAgICAgIHggPSAiTWVhbiBQcmVkaWN0ZWQgLSBBY3R1YWwiLCB5ID0gIkRlbnNpdHkiKQpgYGAKCgojIENoaW5hIGFkdWx0cwoKMS4gVXNlIHBhcnRpY2lwYW50cycgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gaW5mZXIgZmFjdG9yIHN0cnVjdHVyZSAoZ3JvdXAgbGV2ZWwpLgoKW3NlZSBwcmltYXJ5IGFuYWx5c2lzXQoKYGBge3J9CmxvYWRpbmdzX2NoX2FkdWx0cyA8LSBlZmFfY2hfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJlbmFtZV9hbGwofiBnc3ViKCJeLipfIiwgIiIsIC4pKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlKGNhcGFjaXR5ID0gZ3N1YigiIFxcW1xcLlxcLlxcLlxcXSIsICIiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiICIsICJfIiwgY2FwYWNpdHkpKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoImNhcGFjaXR5IikgJT4lCiAgYXMubWF0cml4KCkgJT4lCiAgIyByZXNjYWxlIHRvIHJhbmdlIGZyb20gMCB0byAxCiAgc2NhbGVzOjpyZXNjYWxlKHRvID0gYygwLCAxKSwgZnJvbSA9IGMoLTEsIDEpKQoKaGVhZChsb2FkaW5nc19jaF9hZHVsdHMpCmBgYAoKMi4gVXNlIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKSBpbiBjb21iaW5hdGlvbiB3aXRoIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGdlbmVyYXRlIGZhY3RvciBzY29yZXMgKHBhcnRpY2lwYW50IGxldmVsKS4KCmBgYHtyfQpzY29yZXNfY2hfYWR1bHRzIDwtIGVmYV9jaF9hZHVsdHMkc2NvcmVzW10gJT4lIAogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMSwgdXNpbmcgb2JzZXJ2ZWQgcmFuZ2Ugb2YgZmFjdG9yIHNjb3JlcwogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSkpCgpoZWFkKHNjb3Jlc19jaF9hZHVsdHMpCmBgYAoKWC4gVXNlIGZhY3RvciBzY29yZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBtYWtlIGJpbmFyeSBkZWNpc2lvbnMgYWJvdXQgYXR0cmlidXRpb25zIG9mIGJvZHksIGhlYXJ0LCBhbmQgbWluZCAocGFydGljaXBhbnQgbGV2ZWwgbGV2ZWwpLiBbTkVFREVEP10KCltub3QgeWV0IGRvbmVdCgozLiBVc2UgZmFjdG9yIHNjb3JlcyBbb3IgWD9dIChwYXJ0aWNpcGFudCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCBmYWN0b3IgbG9hZGluZ3MgKGdyb3VwIGxldmVsKSB0byB0byBnZW5lcmF0ZSBsaWtlbGlob29kIG9mIGVhY2ggY2FwYWNpdHkgKHBhcnRpY2lwYW50IGxldmVsKS4KCmBgYHtyfQptYWdpY19jaF9hZHVsdHMgPC0gbWFnaWNfZnVuKGxvYWRpbmdzX2NoX2FkdWx0cywgc2NvcmVzX2NoX2FkdWx0cykgJT4lCiAgZGF0YS5mcmFtZSgpCmBgYAoKNC4gQ29tcGFyZSBsaWtlbGlob29kIG9mIGVhY2ggY2FwYWNpdHkgKHBhcnRpY2lwYW50IGxldmVsKSB3aXRoIGFjdHVhbCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBhc3Nlc3MgY29uc2lzdGVuY3kgb3IgdmlvbGF0aW9ucyB3aXRoIGdyb3VwLWxldmVsIGZhY3RvciBzdHJ1Y3R1cmUuCgpgYGB7cn0KbWFnaWNfc3ViX2RhdGFfY2hfYWR1bHRzIDwtIG1hZ2ljX2NoX2FkdWx0cyAtIGRfY2hfYWR1bHRzX3cKCm1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cyA8LSBtYWdpY19zdWJfZGF0YV9jaF9hZHVsdHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGdhdGhlcihjYXBhY2l0eSwgZGlmZiwgLXN1YmpfaWQpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIl8iLCAiICIsIGNhcGFjaXR5KSwKICAgICAgICAgY2FwYWNpdHkgPSBnc3ViKCJmZWVsIHNpY2siLCAiZmVlbCBzaWNrIFxcW1xcLlxcLlxcLlxcXSIsIGNhcGFjaXR5KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDJ9Cm1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cyAlPiUKICBsZWZ0X2pvaW4oZF9jaF9hZHVsdHMgJT4lIGRpc3RpbmN0KHN1YmpfaWQsIHRhcmdldCkpICU+JQogIGxlZnRfam9pbihsb2FkaW5nc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KGNhcGFjaXR5LCBjYXBhY2l0eV9vcmRfY2gpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjYXBhY2l0eV9vcmRfY2gsIAogICAgICAgICAgICAgeSA9IHN1YmpfaWQsIAogICAgICAgICAgICAgZmlsbCA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0YXJnZXQpLCAKICAgICAgICAgICAgIHNwYWNlID0gImZyZWUiLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIodHlwZSA9ICJkaXYiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJDaGluYSBhZHVsdHMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsIHkgPSAiUGFydGljaXBhbnQiLCBmaWxsID0gIlByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYAoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cyAlPiUKICBncm91cF9ieShzdWJqX2lkKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kaWZmID0gbWVhbihkaWZmLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbWVhbl9kaWZmKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2RlbnNpdHkoKSArCiAgbGFicyh0aXRsZSA9ICJDaGluYSBhZHVsdHMiLAogICAgICAgeCA9ICJNZWFuIFByZWRpY3RlZCAtIEFjdHVhbCIsIHkgPSAiRGVuc2l0eSIpCmBgYAoKCiMgVmFudWF0dSBhZHVsdHMKCjEuIFVzZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGluZmVyIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKS4KCltzZWUgcHJpbWFyeSBhbmFseXNpc10KCmBgYHtyfQpsb2FkaW5nc192dF9hZHVsdHMgPC0gZWZhX3Z0X2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW5hbWVfYWxsKH4gZ3N1YigiXi4qXyIsICIiLCAuKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIiBcXFtcXC5cXC5cXC5cXF0iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIiAiLCAiXyIsIGNhcGFjaXR5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIGFzLm1hdHJpeCgpICU+JQogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMQogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSksIGZyb20gPSBjKC0xLCAxKSkKCmhlYWQobG9hZGluZ3NfdnRfYWR1bHRzKQpgYGAKCjIuIFVzZSBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBnZW5lcmF0ZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0Kc2NvcmVzX3Z0X2FkdWx0cyA8LSBlZmFfdnRfYWR1bHRzJHNjb3Jlc1tdICU+JSAKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEsIHVzaW5nIG9ic2VydmVkIHJhbmdlIG9mIGZhY3RvciBzY29yZXMKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpKQoKaGVhZChzY29yZXNfdnRfYWR1bHRzKQpgYGAKClguIFVzZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gbWFrZSBiaW5hcnkgZGVjaXNpb25zIGFib3V0IGF0dHJpYnV0aW9ucyBvZiBib2R5LCBoZWFydCwgYW5kIG1pbmQgKHBhcnRpY2lwYW50IGxldmVsIGxldmVsKS4gW05FRURFRD9dCgpbbm90IHlldCBkb25lXQoKMy4gVXNlIGZhY3RvciBzY29yZXMgW29yIFg/XSAocGFydGljaXBhbnQgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggZmFjdG9yIGxvYWRpbmdzIChncm91cCBsZXZlbCkgdG8gdG8gZ2VuZXJhdGUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0KbWFnaWNfdnRfYWR1bHRzIDwtIG1hZ2ljX2Z1bihsb2FkaW5nc192dF9hZHVsdHMsIHNjb3Jlc192dF9hZHVsdHMpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCjQuIENvbXBhcmUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkgd2l0aCBhY3R1YWwgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gYXNzZXNzIGNvbnNpc3RlbmN5IG9yIHZpb2xhdGlvbnMgd2l0aCBncm91cC1sZXZlbCBmYWN0b3Igc3RydWN0dXJlLgoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX3Z0X2FkdWx0cyA8LSBtYWdpY192dF9hZHVsdHMgLSBkX3Z0X2FkdWx0c193CgptYWdpY19zdWJfZGF0YV92dF9hZHVsdHMgPC0gbWFnaWNfc3ViX2RhdGFfdnRfYWR1bHRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIGRpZmYsIC1zdWJqX2lkKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiZmVlbCBzaWNrIiwgImZlZWwgc2ljayBcXFtcXC5cXC5cXC5cXF0iLCBjYXBhY2l0eSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyfQptYWdpY19zdWJfZGF0YV92dF9hZHVsdHMgJT4lCiAgbGVmdF9qb2luKGRfdnRfYWR1bHRzICU+JSBkaXN0aW5jdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChjYXBhY2l0eSwgY2FwYWNpdHlfb3JkX3Z0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHlfb3JkX3Z0LCAKICAgICAgICAgICAgIHkgPSBzdWJqX2lkLCAKICAgICAgICAgICAgIGZpbGwgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGFyZ2V0KSwgCiAgICAgICAgICAgICBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHR5cGUgPSAiZGl2IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiVmFudWF0dSBhZHVsdHMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsIHkgPSAiUGFydGljaXBhbnQiLCBmaWxsID0gIlByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYAoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX3Z0X2FkdWx0cyAlPiUKICBncm91cF9ieShzdWJqX2lkKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kaWZmID0gbWVhbihkaWZmLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbWVhbl9kaWZmKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2RlbnNpdHkoKSArCiAgbGFicyh0aXRsZSA9ICJWYW51YXR1IGFkdWx0cyIsCiAgICAgICB4ID0gIk1lYW4gUHJlZGljdGVkIC0gQWN0dWFsIiwgeSA9ICJEZW5zaXR5IikKYGBgCgojIENvbXBhcmlzb24KCmBgYHtyfQpiaW5kX3Jvd3MobWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfZ2hfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfdGhfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfY2hfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfdnRfYWR1bHRzKSAlPiUKICBncm91cF9ieShzdWJqX2lkKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kaWZmID0gbWVhbihkaWZmLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIHkgPSBtZWFuX2RpZmYpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IGNvdW50cnkpLCBoZWlnaHQgPSAwLCBhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JQogICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50cnksIHN1YmpfaWQsIG1lYW5fZGlmZikgJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9kaWZmIiksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFsbCBhZHVsdHMiLAogICAgICAgeCA9ICJDb3VudHJ5IiwgeSA9ICJNZWFuIFByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYApgYGB7cn0KYmluZF9yb3dzKG1hZ2ljX3N1Yl9kYXRhX3VzX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX2doX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX3RoX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX3Z0X2FkdWx0cykgJT4lCiAgZ3JvdXBfYnkoc3Vial9pZCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGlmZiA9IG1lYW4oZGlmZiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZ3N1YigiXy4qJCIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICB0YXJnZXQgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICB0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpLAogICAgICAgICBhYnNfbWVhbl9kaWZmID0gYWJzKG1lYW5fZGlmZikpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIHkgPSBhYnNfbWVhbl9kaWZmKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBjb3VudHJ5KSwgaGVpZ2h0ID0gMCwgYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUKICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdChjb3VudHJ5LCBzdWJqX2lkLCBhYnNfbWVhbl9kaWZmKSAlPiUKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShjb3VudHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJhYnNfbWVhbl9kaWZmIiksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFsbCBhZHVsdHMiLAogICAgICAgeCA9ICJDb3VudHJ5IiwgeSA9ICJBQlNPTFVURSBNZWFuIFByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYAo=